<?php

/**
 * 
 */
class UtilityComputingServidoresController extends Sgit_Controller_Action
{

    protected $_main_model = 'UcServidores';

    protected $_checkZona = true;


    public function indexAction()
    {


        $fecha_baja = $this->getRequest()->has('fecha_baja') ? null : date('01/m/Y', strtotime("-2 months"));


        $filtros = new Sgit_Form_Filtros();
        $filtros->addInput('fecha_alta', 'Start Date', null, array('readonly' => 'readonly'))->addInput('fecha_baja', 'End Date >=', $fecha_baja)->addFormSelect(new Sgit_Form_Element_Select_ProyectosUC('id_proyecto'))->addInput('pep', 'PEP')->addInput('ticket', 'Ticket')->addPdf();
        $values = $this->_getFiltrosValues($filtros);
        $filtros->myRender();


        $rows = $this->_model->default->getServidoresByZona($this->_idZona, $values);

        $this->view->rows = $this->_prepareRowsToTr($rows);

    }

    /*
    public function tarifasAction()
    {
    
    $this->model->UcServicios = new Application_Model_UcServicios();
    $this->model->UcTipoServidor = new Application_Model_UcTipoServidor();
    

    
    $this->view->UcServicios = $this->model->UcServicios->GetAll();
    $this->view->UcTipoServidor = $this->model->UcTipoServidor->GetAll();
    
    
    }
    
    public function editartarifasAction()
    {
    
    
    $id= $this->request->getParam('id');
    $value= $this->request->getParam('value',null);
    
    $aux = explode( '_', trim($id) );
    $id  = $aux[0];
    $col = $aux[1];
    $sos = $aux[2];
    

    if($sos == 's1'){
    $modelo = new Application_Model_UcTipoServidor() ;
    }else{
    $modelo = new Application_Model_UcServicios() ;
    }
    
    
    $record[$col]=$value;
    $n = $modelo->updateRow($record,array('id'=>$id));
    
    $json['status'] = is_numeric($n) ? 'ok' : 'ko';
    $this->_helper->json($json);
    
    }
    
    */

    public function editarAction()
    {

        $filterNull = new Zend_Filter_Null();
        $filterInt = new Zend_Filter_Int();

        $this->_model->UcExtra = new Application_Model_UcExtra();

        $id = $this->_getParam('id');
        $idZona = $this->_getParam('idZona');
        $this->view->id = $id;
        $this->view->idZona = $idZona;


        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        if (!$this->getRequest()->isXmlHttpRequest())
        {
            throw new Zend_Controller_Exception($this->_controllerName . ':' . $this->_actionName . ":{$this->_id} > Solo se puede acceder via ajax");
        }


        $extra = $this->_model->UcExtra->GetAll(array('id_uc = ?' => $id));


        if ($this->getRequest()->isPost())
        {
            $values = $this->getRequest()->getPost();

            $data['id_proyecto'] = $filterNull->filter($values['id_proyecto']);
            $data['pep'] = $values['pep'];
            $data['ticket_nec'] = $values['ticket_nec'];
            $data['ticket_cliente'] = $values['ticket_cliente'];
            $data['fecha_alta'] = Sgit_Filter_DateTo::filter($values['fecha_alta']);
            $data['fecha_baja'] = Sgit_Filter_DateTo::filter($values['fecha_baja']);
            $data['id_tipo_servidor'] = Sgit_Filter_Number::filter($values['id_tipo_servidor']);
            $data['nombre_servidor'] = $values['nombre_servidor'];
            $data['internet'] = Sgit_Filter_Number::filter($values['internet']);
            $data['monitor'] = Sgit_Filter_Number::filter($values['monitor']);
            $data['backup'] = Sgit_Filter_Number::filter($values['backup']);
            $data['firewall'] = Sgit_Filter_Number::filter($values['firewall']);


            $this->_insertExtra($id,$extra, $values);
            $this->_updateExtra($extra, $values);


            if ($data2['fecha_ram'])
                $this->_saveRam($id, $data2['fecha_ram'], $data2['cantidad_ram']);
            if ($data2['fecha_storage'])
                $this->_saveStorage($id, $data2['fecha_storage'], $data2['cantidad_storage'], $data2['cantidad_lun']);

            $this->_model->default->updateRow($data, $id);

            $row = $this->_getFila($id);
            $row['idZona'] = $idZona;
            $json['status'] = 'ok';
            $json['fila'] = $this->view->partial($this->_controllerName . '/fila.phtml', $row);

            $this->postDispatch();

            $this->_helper->json($json);
        }


        $row = $this->_model->default->getRow($id);
        $this->view->id = $id;
        $cliente = new Sgit_Form_Element_Select_ProyectosUC('id_proyecto');
        $this->view->proyectos = $cliente->getMultiOptions();
        $tipo_servidor = new Sgit_Form_Element_Select_TipoServidorUc('id_tipo_servidor');
        $this->view->tipo_servidor = $tipo_servidor->getMultiOptions();
        $row['fecha_alta'] = Sgit_Filter_DateTo::filter($row['fecha_alta']);
        $row['fecha_baja'] = Sgit_Filter_DateTo::filter($row['fecha_baja']);

        $this->view->extra = $extra;
        $this->view->row = $row;

        echo $this->render();

    }

    protected function _getFila($id)
    {
        $row = $this->_model->default->getServidoresByZona($this->_idZona, $values,$id);
        $row = $this->_prepareValuesToTr($row[0]);
        return $row;
    }


    function _updateExtra($extra, $values)
    {
       
        foreach ((array )$extra as $v)
        {
            $id = $v['id'];
            $data['fecha'] =    Sgit_Filter_DateTo::filter($values["fecha"][$id]);
            $data['cantidad'] = Sgit_Filter_Number::filter($values["cantidad"][$id]);
            $data['lun'] =      Sgit_Filter_Number::filter($values["lun"][$id]);

            $this->_model->UcExtra->updateRow($data, array('id=?' => $id));
        }
    }


    function _insertExtra($id,$extra, $values)
    {
        $data2['fecha_storage'] =       Sgit_Filter_DateTo::filter($values['fecha_storage']);
        $data2['cantidad_storage'] =    Sgit_Filter_Number::filter($values['cantidad_storage']);
        $data2['cantidad_lun'] =        Sgit_Filter_Number::filter($values['cantidad_lun']);
        $data2['fecha_ram'] =           Sgit_Filter_DateTo::filter($values['fecha_ram']);
        $data2['cantidad_ram'] =        Sgit_Filter_Number::filter($values['cantidad_ram']);

        if ($data2['fecha_ram'])
            $this->_saveRam($id, $data2['fecha_ram'], $data2['cantidad_ram']);
        if ($data2['fecha_storage'])
            $this->_saveStorage($id, $data2['fecha_storage'], $data2['cantidad_storage'], $data2['cantidad_lun']);
        return true;

    }


    public function insertarAction()
    {
        $this->_main_form = 'UcServidoresAdd';

        $this->_model->UcExtra = new Application_Model_UcExtra();
        $this->_insertar();
    }


    public function borrarAction()
    {
        $this->_borrar();
    }

    public function autocompleteAction()
    {
        $this->_autocomplete();
    }


    protected function _executeInsertar()
    {

        $row = $this->_form->getValues();

        $data['fecha_alta'] = Sgit_Filter_DateTo::filter($row['fecha_alta']);
        $data['fecha_baja'] = Sgit_Filter_DateTo::filter($row['fecha_baja']);
        $data['id_proyecto'] = $row['id_proyecto'];
        $data['pep'] = $row['pep'];
        $data['ticket_nec'] = $row['ticket_nec'];
        $data['ticket_cliente'] = $row['ticket_cliente'];
        $data['id_zona'] = $this->_idZona;


        for ($i = 1; $i <= 5; $i++)
        {

            if (is_numeric($row["id_tipo_servidor$i"]))
            {
                $data['nombre_servidor'] = $row["nombre_servidor$i"];
                $data['id_tipo_servidor'] = $row["id_tipo_servidor$i"];
                $data['internet'] = $row["internet$i"];
                $data['backup'] = $row["backup$i"];
                $data['firewall'] = $row["firewall$i"];
                $data['monitor'] = $row["monitor$i"];

                $id = $this->_model->default->insertRow($data);
                $this->_saveRam($id, $data['fecha_alta'], $row["ram$i"]);
                $this->_saveStorage($id, $data['fecha_alta'], $row["storage$i"], $row["lun$i"]);

            }

        }


        $json['status'] = 'reload';

        $this->_helper->json($json);
    }

    protected function _saveRam($id, $fecha, $cantidad)
    {

        $data['id_uc'] = $id;
        $data['fecha'] = $fecha;
        $data['cantidad'] = $cantidad;
        $data['tipo'] = 'ram';

        $this->_model->UcExtra->insertRow($data);

    }

    protected function _saveStorage($id, $fecha, $storage, $lun)
    {

        $data['id_uc'] = $id;
        $data['fecha'] = $fecha;
        $data['cantidad'] = $storage;
        $data['lun'] = $lun;
        $data['tipo'] = 'storage';

        $this->_model->UcExtra->insertRow($data);

    }

    protected function _prepareValuesToTr($row)
    {
        $row['cliente'] = array_shift(explode('|', $row['cliente']));
        $row['cliente'] = ($row['cliente']) ? $row['cliente'] : 'Interno';
        $row['monitor'] = $row['monitor'] ? 'SI' : 'NO';
        $row['fecha_alta'] = Sgit_Filter_DateTo::filter($row['fecha_alta']);
        $row['fecha_baja'] = Sgit_Filter_DateTo::filter($row['fecha_baja']);
        return $row;

    }

    function _prepareValuesToDb($row)
    {
        $row = $this->_form->getValues();


        $this->_model->UcExtra = new Application_Model_UcExtra();


        $id = $this->_getParam('id');
        $extra = $this->_model->UcExtra->GetCol('id', array('id_uc=?' => $id));

        foreach ($extra as $v)
        {
            $fecha = $row['fecha' . $v];
            $cantidad = $row['cantidad' . $v];

            $fecha = Sgit_Filter_DateTo::filter($fecha);


            if ($row['cantidad_lun' . $v])
                $cantidad_lun = $row['cantidad_lun' . $v];
            else
                $cantidad_lun = null;

            $this->_updateExtra($v, $fecha, $cantidad, $cantidad_lun);
        }


        $this->_saveRam($id, $row['fecha_ram'], $row['cantidad_ram']);
        $this->_saveStorage($id, $row['cantidad_storage'], $row['cantidad_storage'], $row['cantidad_lun']);


        $data['fecha_alta'] = Sgit_Filter_DateTo::filter($row['fecha_alta']);
        $data['fecha_baja'] = Sgit_Filter_DateTo::filter($row['fecha_baja']);
        $data['id_proyecto'] = $row['id_proyecto'];
        $data['pep'] = $row['pep'];
        $data['ticket_nec'] = $row['ticket_nec'];
        $data['ticket_cliente'] = $row['ticket_cliente'];
        $data['id_zona'] = $this->_idZona;

        $data['nombre_servidor'] = $row["nombre_servidor"];
        $data['id_tipo_servidor'] = $row["id_tipo_servidor"];
        $data['internet'] = $row["internet"];
        $data['backup'] = $row["backup"];
        $data['firewall'] = $row["firewall"];
        $data['monitor'] = $row["monitor"];


        return $data;


    }


    function _prepareValuesToForm($row)
    {
        $row['fecha_alta'] = Sgit_Filter_DateTo::filter($row['fecha_alta']);
        $row['fecha_baja'] = Sgit_Filter_DateTo::filter($row['fecha_baja']);
        return $row;
    }


}
